home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Browsers, Managers & Extensions / CookieSwap 0.5 / cookieswap-0.5.0-fx.xpi / chrome / chromeFiles / content / profileUI.js < prev    next >
Text File  |  2007-07-22  |  11KB  |  262 lines

  1. // *****************************************************************************
  2. // *                           ProfileUI Class                                 *
  3. // *                                                                           *
  4. // ************************** Coding Standards *********************************
  5. // *  gMyVariable     - global variable (starts with "g", then mixed case)     *
  6. // *  myVariable      - variables passed into functions                        *
  7. // *  my_variable     - local variable inside of a function                    *
  8. // *  this.myVariable - class attributes/variable (mixed case & always         *
  9. // *                    referenced with "this.")                               *
  10. // *  MyFunction      - functions are always mixed case                        *
  11. // *  MY_CONSTANT     - constants are all caps with underscores                *
  12. // *                                                                           *
  13. // *************************** Revision History ********************************
  14. // *  Name       Date       BugzID  Action                                     *
  15. // *  ---------  ---------  -----   ------                                     *
  16. // *  SteveTine  28Dec2005  12561   Initial Creation                           *
  17. // *  SteveTine  15Jan2005  12751   Stop-gap solution to multiple window prob  *
  18. // *  SteveTine  31Jan2007  Trac4   Exchange CookieSwap term in statusbar with icon *
  19. // *                                                                           *
  20. // ************************* BEGIN LICENSE BLOCK *******************************
  21. // * Version: MPL 1.1                                                          *
  22. // *                                                                           *
  23. // *The contents of this file are subject to the Mozilla Public License Version*
  24. // * 1.1 (the "License"); you may not use this file except in compliance with  *
  25. // * the License. You may obtain a copy of the License at                      *
  26. // * http://www.mozilla.org/MPL/                                               *
  27. // *                                                                           *
  28. // * Software distributed under the License is distributed on an "AS IS" basis,*
  29. // * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License  *
  30. // * for the specific language governing rights and limitations under the      *
  31. // * License.                                                                  *
  32. // *                                                                           *
  33. // * The Original Code is the CookieSwap Mozilla/Firefox Extension             *
  34. // *                                                                           *
  35. // * The Initial Developer of the Original Code is                             *
  36. // * Steven Tine.                                                              *
  37. // * Portions created by the Initial Developer are Copyright (C) 2006          *
  38. // * the Initial Developer. All Rights Reserved.                               *
  39. // *                                                                           *
  40. // * Contributor(s): Steven Tine                                               *
  41. // *                                                                           *
  42. // **************************END LICENSE BLOCK**********************************
  43.  
  44. //Static instance attribute
  45. var gProfileUI_instance = null;
  46.  
  47. //-------------ProfileUI class definition--------------
  48. //The ProfileUI class handles displaying all the Profile information to the User Interface.  
  49. //  This class enables you to change the way the profiles are displayed or presented to the 
  50. //  user without affecting the backend.  This class will call the registered function when 
  51. //  the user selects a new profile
  52. //This class is a singleton, so there is only one in existance.  Use the
  53. //  ProfileUI_getInstance() function to get the instance of the class.
  54. function ProfileUI()
  55. {
  56.    //Define a debug function for the class...change true/false to turn it on/off
  57.    this.classDump=function(s){true ? cookieswap_dbg("[ProfileUI]" + s) : (s)}
  58.  
  59.    //This is the way to call the debug function
  60.    this.classDump("START ctor");
  61.  
  62.    //---Define some attributes
  63.  
  64.    //This is the item that users see in the status bar...its name should include the
  65.    //  active profile
  66.    this.cookieStatusBar = document.getElementById('cookieswap-label');
  67.  
  68.    //Get the cookie-element-list which is the popup menu in the status bar
  69.    this.cookieElemList = document.getElementById('cookie-element-list');
  70.  
  71.    //Get the seperator between the proifle names and the functions.  This separator
  72.    //  is the divider between the profile names and the options.  So, insert all the
  73.    //  profile before this separator.
  74.    this.profileSeparator = document.getElementById("cookie-profile-list-separator");
  75.  
  76.    //This attribute holds the pointer to the function that the caller of this class
  77.    //  wants to be called when the user selects a profile on the UI.
  78.    //Default it to null until a user registers their callback with the class.
  79.    this.profileSelectedCallback = null;
  80.  
  81.    this.classDump("END ctor");
  82. }
  83.  
  84. //---------Static Methods-------------
  85.  
  86. //Publically available method to get the singleton instance of the ProfileUI class
  87. function profileUI_getInstance()
  88. {
  89.    if (gProfileUI_instance == null)
  90.    {
  91.       //If this is the first time this method is being called, create the singleton
  92.       //  instance of the class and return it.
  93.       gProfileUI_instance = new ProfileUI();
  94.       cookieswap_dbg("Created singleton instance of ProfileUI\n");
  95.    }
  96.  
  97.    return gProfileUI_instance;
  98. }
  99.  
  100. //This static method is called by the browser when a user selects a profile from the menu
  101. function profileUI_profileSelected(menuitem)
  102. {
  103.    var  profileIdSelected = menuitem.getAttribute("label");
  104.    var  profileUi = profileUI_getInstance();
  105.  
  106.    profileUi.classDump("New profile selected: " + menuitem.label + "(" + profileIdSelected + ")");
  107.  
  108.    if (profileUi.profileSelectedCallback != null)
  109.    {
  110.       //A callback is registred for this event...call it
  111.       profileUi.classDump("Invoking callback");
  112.       profileUi.profileSelectedCallback(profileIdSelected);
  113.    }
  114.    else
  115.    {
  116.       profileUi.classDump("new profile selected but no callback exists");
  117.    }
  118. }
  119.  
  120. //---------Public Methods-------------
  121.  
  122. //Allow caller to register a callback that is called when a user selects a
  123. // profile on the UI.
  124. ProfileUI.prototype.registerProfileSelectedCallback = function(callback)
  125. {
  126.    this.profileSelectedCallback = callback;
  127.    this.classDump("Caller registered callback");
  128. }
  129.  
  130. //This method will add a profile to the UI list.
  131. //  profileName  - descriptive string of the profile
  132. //  profileID    - ID associated with the profile
  133. ProfileUI.prototype.addProfileToList = function(profileName, profileID)
  134. {
  135.    var  new_profile;
  136.  
  137.    //We'll create a new menuitem for the profile
  138.    new_profile = document.createElement("menuitem");
  139.    new_profile.setAttribute("id", "profile:" + profileName);
  140.    new_profile.setAttribute("label", profileName);
  141.    new_profile.setAttribute("type", "checkbox");
  142.    new_profile.setAttribute("checked", false);
  143.    new_profile.setAttribute("class", "cookie-profile");
  144.    new_profile.setAttribute("profileId", profileID);
  145.    new_profile.setAttribute("oncommand", "profileUI_profileSelected(this);");
  146.       
  147.    this.classDump("Inserting '" + profileName + "'");
  148.  
  149.    //Insert the new profile just before the separator so that this profile
  150.    //  would be after all the existing profile
  151.    this.cookieElemList.insertBefore(new_profile, this.profileSeparator);
  152. }   
  153.  
  154. //This method will remove the selected profile from the UI list
  155. ProfileUI.prototype.removeProfileFromList = function(profileID)
  156. {
  157. //---[TODO] NOT IMPLEMENTED YET---
  158.    this.classDump("UNIMPLEMENTED FUNCTION CALLED...removeProfileFromList");
  159. }
  160.  
  161. //This method will show the selected profile as active in the UI list
  162. ProfileUI.prototype.showProfileAsActive = function(profileID)
  163. {
  164.    var profile_menu;
  165.  
  166.    this.classDump("Setting " + profileID + " as active...first uncheck all");
  167.  
  168.    this.uncheckAll();
  169.  
  170.    //We need to get the profile_menu item out of the menu so we can get
  171.    //  the name of the profile and set it to checked.
  172.    profile_menu = this.getMenuItem(profileID);
  173.    
  174.    this.classDump("Finished getMenuItem");
  175.  
  176.    if(profile_menu != null)
  177.    {
  178.       //Set the checkbox on the profile and put the profile name in the StatusBar
  179.       profile_menu.setAttribute("checked", true);
  180.       this.cookieStatusBar.setAttribute("value", profile_menu.getAttribute("label"));
  181.       this.classDump("Handled active profile");
  182.    }
  183.    else
  184.    {
  185.       //TODO...define INVALID_PROFILE_ID in this scope
  186.       //Passing in the INVALID_PROFILE_ID is normal (to deselect any profile).  If we
  187.       //  ended up here for another reason it is an unexpected error
  188.       if (profileID != INVALID_PROFILE_ID)
  189.       {
  190.          this.classDump("ERROR-UNABLE TO FIND MENUTIEM FOR '" + profileID + "'");
  191.       }
  192.  
  193.       //[TODO]Should uncheck the current profile and change the statusbar to just CookieSwap:
  194.       //  Probably should keep track of currActive and deselect it first then try to
  195.       //  select the new profile
  196.    }
  197. }
  198.  
  199. //This private method will return the menu item matching the profileID passed in.
  200. //  If no menu item is found, null is returned
  201. ProfileUI.prototype.getMenuItem = function(profileID)
  202. {
  203.    var  menu_items;
  204.    var  profile_item;
  205.       
  206.    this.classDump("Searching for elementByAttribute");
  207.  
  208.    menu_items = this.cookieElemList.getElementsByAttribute("label", profileID);
  209.    
  210.    this.classDump("Finished searching for elementByAttribute");
  211.  
  212.    if (menu_items != null)
  213.    {
  214.       //We found the menu item, but it is possible that item 0 is null
  215.       this.classDump("Found a menu mathing profileID");
  216.       profile_item = menu_items[0];
  217.    }
  218.    else
  219.    {
  220.       this.classDump("No menu found matching profileID");
  221.       profile_item = null;
  222.    }
  223.  
  224.    return profile_item
  225. }
  226.  
  227. //Uncheck all profiles in the menulist
  228. ProfileUI.prototype.uncheckAll = function()
  229. {
  230.    var  checked_items;
  231.       
  232.    this.classDump("Unchecking all profiles");
  233.  
  234.    checked_items = this.cookieElemList.getElementsByAttribute("checked", true);
  235.    
  236.    this.classDump("Finished searching for elementByAttribute");
  237.  
  238.    if (checked_items != null)
  239.    {
  240.       for(var i=0; i<checked_items.length; i++)
  241.       {
  242.          if (checked_items[i] != null)
  243.          {
  244.             this.classDump("Unchecking " + checked_items[i].getAttribute("label"));
  245.             checked_items[i].setAttribute("checked", false);
  246.          }
  247.          else
  248.          {
  249.             this.classDump("Item " + i + " was unexpectedly null...");
  250.          }
  251.       }
  252.    }
  253. }
  254.  
  255. //This method will have the UI indicate that CookieSwap is not active in
  256. // this browser window
  257. ProfileUI.prototype.showBrowserAsInactive = function()
  258. {
  259.       this.cookieStatusBar.setAttribute("value", "");
  260. }
  261.  
  262.